﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using System.Windows.Forms;
using System.Data;

namespace AdatbazisProjekt
{
    class TermekReszletData:DalGen
    {
		// termekek reszleteivel kapcsolatos adatok frissiteset es lekerdezeset vegzo osztaly
        public TermekReszletData(ref bool Err)
        {
            if (!base.IsConnectCreated())
            {
                Err = !base.MakeConnection();
            }
        }

        private string TermekIDNevUtan(string nev)
        {
			// TermekID-t teriti vissza a termek neve alapjan
            OpenConnection();
            string iD = "";
            string error = "";
            SqlDataReader reader = mExecuteReader("SELECT TermekID FROM Termekek WHERE TermekNev = '" + nev + "'", ref error, null);
            if (reader.Read())
            {
                iD = reader["TermekID"].ToString();
            }
            reader.Close();
            this.CloseConnection();
            return iD;
        }


        private String AltalanosStringSelect(String cmd, String mezo, SqlTransaction tran)
        {
			//  egy olyan Select parancs altalanos leirasa mely egyetlen adatot terit vissza
            try
            {
                this.OpenConnection();
                string error = "";
                string eredmeny = null;
                SqlDataReader reader = mExecuteReader(cmd, ref error, tran);
                if (reader.Read())
                {
                    eredmeny = reader[mezo].ToString();
                //    this.CloseConnection();
                }
                if (error != "OK")
                {
                    MessageBox.Show("Hiba a " + cmd + " SQL parancs vegrehajtasa kozben.A hiba: " + error);
                }
                reader.Close();
                return eredmeny;
            }
            catch (Exception e)
            {
                MessageBox.Show("Hiba a :" + cmd + "parancs vegrehajtasa kozben!"+e.Message);
                return null;
            }
        }

        public List<String> GetProcesszorInfo(String termekNev)
        {
			//Processzorra vonatkozo adatok lekerese es visszeteritese egy string listaban

            // Pesszimista tranzakcio kezeles
            string termekID = TermekIDNevUtan(termekNev);
            try
            {
                OpenConnection();
                SqlTransaction tran = mySqlConn.BeginTransaction(IsolationLevel.Serializable);

                List<String> processzorInf = new List<string>();
                string processzorID = AltalanosStringSelect("SELECT AlkID FROM Processzorok, Termekek, Alkatreszek, Felepites WHERE Termekek.TermekID = Felepites.TermekID AND Felepites.AlkatreszID = Alkatreszek.AlkID AND Alkatreszek.AlkID = Processzorok.AlkatreszID AND Termekek.TermekID =" + termekID, "AlkID", tran);
                processzorInf.Add(AltalanosStringSelect("SELECT Nev FROM Processzorok WHERE AlkatreszID =" + processzorID, "Nev", tran));
                processzorInf.Add(AltalanosStringSelect("SELECT Ertek FROM Tulajdonsagok, AlkTulajd WHERE Nev = 'Teljesitmeny' AND Tulajdonsagok.TulajdonsagID = AlkTulajd.TulajdonsagID AND AlkatreszID =" + processzorID, "Ertek", tran));
                processzorInf.Add(AltalanosStringSelect("SELECT Ertek FROM Tulajdonsagok, AlkTulajd WHERE Nev = 'MagSzam' AND Tulajdonsagok.TulajdonsagID = AlkTulajd.TulajdonsagID AND AlkatreszID =" + processzorID, "Ertek", tran));
                processzorInf.Add(AltalanosStringSelect("SELECT Ertek FROM Tulajdonsagok, AlkTulajd WHERE Nev = 'ThreadSzam' AND Tulajdonsagok.TulajdonsagID = AlkTulajd.TulajdonsagID AND AlkatreszID =" + processzorID, "Ertek", tran));
                processzorInf.Add(AltalanosStringSelect("SELECT GyartoNev FROM Gyartok, Processzorok WHERE Gyartok.GyartoID = Processzorok.GyartoID AND Processzorok.AlkatreszID =" + processzorID, "GyartoNev", tran));

                tran.Commit();
                tran.Dispose();

                CloseConnection();
                return processzorInf;
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
            return null;
        }

        public List<String> GetRamInfo(String termekNev)
        {
			//RAMra vonatkozo adatok lekerese es visszeteritese egy string listaban

            // Pesszimista tranzakcio kezeles
            string termekID = TermekIDNevUtan(termekNev);

            OpenConnection();


            SqlTransaction tran = mySqlConn.BeginTransaction(IsolationLevel.Serializable);

            
            List<String> ramInf = new List<string>();
            string ramID = AltalanosStringSelect("SELECT AlkID FROM RAM, Termekek, Alkatreszek, Felepites WHERE Termekek.TermekID = Felepites.TermekID AND Felepites.AlkatreszID = Alkatreszek.AlkID AND Alkatreszek.AlkID = RAM.AlkatreszID AND Termekek.TermekID =" + termekID, "AlkID",tran);
            ramInf.Add(AltalanosStringSelect("SELECT Nev FROM RAM WHERE AlkatreszID =" + ramID, "Nev", tran));
            ramInf.Add(AltalanosStringSelect("SELECT Ertek FROM Tulajdonsagok, AlkTulajd WHERE Nev = 'Meret' AND Tulajdonsagok.TulajdonsagID = AlkTulajd.TulajdonsagID  AND AlkatreszID =" + ramID, "Ertek", tran));
            ramInf.Add(AltalanosStringSelect("SELECT Ertek FROM Tulajdonsagok, AlkTulajd WHERE Nev = 'Tipus' AND Tulajdonsagok.TulajdonsagID = AlkTulajd.TulajdonsagID  AND AlkatreszID =" + ramID, "Ertek", tran));
            ramInf.Add(AltalanosStringSelect("SELECT GyartoNev FROM Gyartok, RAM WHERE Gyartok.GyartoID = RAM.GyartoID AND RAM.AlkatreszID =" + ramID, "GyartoNev", tran));

            tran.Commit();
            tran.Dispose();

            CloseConnection();
            return ramInf;
        }

        public List<String> GetVideokartyaInfo(String termekNev)
        {
			//Videokartyara  vonatkozo adatok lekerese es visszeteritese egy string listaban
            string termekID = TermekIDNevUtan(termekNev);

            OpenConnection();

            SqlTransaction tran = mySqlConn.BeginTransaction(IsolationLevel.Serializable);

            List<String> vkInf = new List<string>();
            string vkID = AltalanosStringSelect("SELECT AlkID FROM VideoKartyak, Termekek, Alkatreszek, Felepites WHERE Termekek.TermekID = Felepites.TermekID AND Felepites.AlkatreszID = Alkatreszek.AlkID AND Alkatreszek.AlkID = VideoKartyak.AlkatreszID AND Termekek.TermekID =" + termekID, "AlkID",tran);
            vkInf.Add(AltalanosStringSelect("SELECT Nev FROM VideoKartyak WHERE AlkatreszID =" + vkID, "Nev", tran));
            vkInf.Add(AltalanosStringSelect("SELECT Ertek FROM Tulajdonsagok, AlkTulajd WHERE Nev = 'Teljesitmeny' AND Tulajdonsagok.TulajdonsagID = AlkTulajd.TulajdonsagID  AND AlkatreszID =" + vkID, "Ertek", tran));
            vkInf.Add(AltalanosStringSelect("SELECT GyartoNev FROM Gyartok, VideoKartyak WHERE Gyartok.GyartoID = VideoKartyak.GyartoID AND VideoKartyak.AlkatreszID =" + vkID, "GyartoNev", tran));

            tran.Commit();
            tran.Dispose();

            CloseConnection();

            return vkInf;
        }

        public List<String> GetMerevlemezInfo(String termekNev)
        {
			// Merevlemezre  vonatkozo adatok lekerese es visszeteritese egy string listaban
            string termekID = TermekIDNevUtan(termekNev);

            OpenConnection();

            SqlTransaction tran = mySqlConn.BeginTransaction(IsolationLevel.Serializable);
            List<String> hardInf = new List<string>();
            string hardID = AltalanosStringSelect("SELECT AlkID FROM Merevlemezek, Termekek, Alkatreszek, Felepites WHERE Termekek.TermekID = Felepites.TermekID AND Felepites.AlkatreszID = Alkatreszek.AlkID AND Alkatreszek.AlkID = Merevlemezek.AlkatreszID AND Termekek.TermekID =" + termekID, "AlkID", tran);
            hardInf.Add(AltalanosStringSelect("SELECT Nev FROM Merevlemezek WHERE AlkatreszID =" + hardID, "Nev", tran));
            hardInf.Add(AltalanosStringSelect("SELECT Ertek FROM Tulajdonsagok, AlkTulajd WHERE Nev = 'Kapacitas' AND Tulajdonsagok.TulajdonsagID = AlkTulajd.TulajdonsagID  AND AlkatreszID =" + hardID, "Ertek", tran));
            hardInf.Add(AltalanosStringSelect("SELECT GyartoNev FROM Gyartok, Merevlemezek WHERE Gyartok.GyartoID = Merevlemezek.GyartoID AND Merevlemezek.AlkatreszID =" + hardID, "GyartoNev", tran));

            tran.Commit();
            tran.Dispose();

            CloseConnection();
            return hardInf;
        }

        public List<String> GetKepernyoInfo(String termekNev)
        {
			// Kepernyokre  vonatkozo adatok lekerese es visszeteritese egy string listaban
            string termekID = TermekIDNevUtan(termekNev);

            OpenConnection();
            SqlTransaction tran = mySqlConn.BeginTransaction(IsolationLevel.Serializable);
            List<String> kEInf = new List<string>();
            string kEID = AltalanosStringSelect("SELECT AlkID FROM Kepernyok, Termekek, Alkatreszek, Felepites WHERE Termekek.TermekID = Felepites.TermekID AND Felepites.AlkatreszID = Alkatreszek.AlkID AND Alkatreszek.AlkID = Kepernyok.AlkatreszID AND Termekek.TermekID =" + termekID, "AlkID", tran);
            kEInf.Add(AltalanosStringSelect("SELECT Nev FROM Kepernyok WHERE AlkatreszID =" + kEID, "Nev", tran));
            kEInf.Add(AltalanosStringSelect("SELECT Ertek FROM Tulajdonsagok, AlkTulajd WHERE Nev = 'Atmero' AND Tulajdonsagok.TulajdonsagID = AlkTulajd.TulajdonsagID  AND AlkatreszID =" + kEID, "Ertek", tran));
            kEInf.Add(AltalanosStringSelect("SELECT GyartoNev FROM Gyartok, Kepernyok WHERE Gyartok.GyartoID = Kepernyok.GyartoID AND Kepernyok.AlkatreszID =" + kEID, "GyartoNev", tran));

            tran.Commit();
            tran.Dispose();
            CloseConnection();
            return kEInf;
        }

        public String GetOrszagInfo(String termekNev)
        {
			// Szarmazasi orszagra vonatkozo adatok lekerese
            return AltalanosStringSelect("SELECT OrszagNev FROM Termekek, Gyartok, Orszagok WHERE Termekek.GyartoID = Gyartok.GyartoID AND Gyartok.OrszagID = Orszagok.OrszagID AND Termekek.TermekNev = '"+termekNev+"'", "OrszagNev",null);
            CloseConnection();
        }

    }
}
